package cn.liangxxhu.gateway.factory;

import cn.liangxxhu.gateway.handler.DebugInvocationHandler;

import java.lang.reflect.Proxy;

/**
 * JDK动态代理工厂类
 * 用于创建基于JDK动态代理的代理对象，通过反射机制为目标对象生成代理实例
 * 实现对目标方法的增强（如日志打印、性能监控、权限校验等）
 */
public class JdkProxyFactory {

    /**
     * 创建目标对象的动态代理实例
     * JDK动态代理的核心是通过实现目标对象的接口，在调用目标方法时插入增强逻辑
     *
     * @param target 被代理的目标对象（必须实现至少一个接口，否则JDK动态代理无法生效）
     * @return 代理对象实例，类型为目标对象实现的接口类型，可直接强转为对应接口使用
     */
    public static Object getProxy(Object target) {
        // 通过Proxy.newProxyInstance方法生成代理对象
        return Proxy.newProxyInstance(
                target.getClass().getClassLoader(),     // 目标类的类加载器，用于加载代理类
                target.getClass().getInterfaces(),      // 目标类实现的所有接口，代理类会实现这些接口
                new DebugInvocationHandler(target)      // 自定义的调用处理器，封装了代理逻辑（增强代码+目标方法调用）
        );
    }
}